#

| Chapter 27 Searching Through Files |

## 27.5 Extended Searching for Text with egrep

The egrep command is yet another version of grep (27.2), one that extends the syntax of regular expressions (26.4). A plus sign (`+`) following a regular expression matches one or more occurrences of the regular expression; a question mark (`?`) matches zero or one occurrences. In addition, regular expressions can be nested within parentheses:

>     % egrep "Lab(oratorie)?s" name.list
>     AT&T Bell Laboratories
>     AT&T Bell Labs
>     Symtel Labs of Chicago

Parentheses surround a second regular expression and `?` modifies this expression. The nesting helps to eliminate unwanted matches; for instance, the word Labors or oratories would not be matched.

Another special feature of egrep is the vertical bar (`|`), which serves as an or operator between two expressions. Lines matching either expression are printed, as in the next example:

>     % egrep "stdscr|curscr" ch03
>     into the stdscr, a character array.
>     When stdscr is refreshed, the
>     stdscr is refreshed.
>     curscr.
>     initscr() creates two windows: stdscr
>     and curscr.

Remember to put the expression inside quotation marks to protect the vertical bar from being interpreted by the shell as a pipe symbol. Look at the next example:

>     % egrep "Alcuin (User|Programmer)('s)? Guide" docguide
>     Alcuin Progammer's Guide is a thorough
>     refer to the Alcuin User Guide
>     Alcuin User's Guide introduces new users to

You can see the flexibility that egrep's syntax can give you, matching either `User` or `Programmer` and matching them whether or not they had an `'s`. Article 20.8 has another example and explanation of egrep.

Both egrep and fgrep (27.6) can read search patterns from a file using the -f option (27.7). The calendar (48.4) utility makes a file full of complicated expressions for matching dates.

- DD from UNIX Text Processing, Hayden Books, 1987, Chapter 11

27.4 Finding a Pattern Only When It's a Word |  | 27.6 Fast grep Isn't